package com.xinnet.mms.customerstate.dao;

import java.sql.SQLException;
import java.util.List;

import org.springframework.stereotype.Repository;

import com.xinnet.core.utils.page.PageView;
import com.xinnet.mms.entity.CustomStateHist;
import com.xinnet.mms.entity.Customer;
import com.xinnet.mms.entity.Emp;
import com.xinnet.mms.entity.Notice;
/**
 * 
 * @author 王湛智
 *
 */
@Repository
public interface CustomerStateHistDao {
	/**
	 * 
	 * 功能描述：插入一条人员客户关系
	 * 
	 * @author 王湛智
	 * 
	 * @param customerStateHist
	 * @throws SQLException
	 */
	public void addCustomerStateHist(CustomStateHist customerStateHist) throws SQLException;
	
	/**
	 * 根据客户ID获取已接收的客户状态历史
	 * @param customId
	 * @return
	 */
	public List<CustomStateHist> getReceiveCustomStateHistByCustomId(String customId);
	
	/**
	 * 获取客户状态历史
	 * @return
	 */
	public List<CustomStateHist> getCustomStateHist();
	
	/**
	 * 根据客户ID 产品ID获取已接收的客户状态历史
	 * @param customId
	 * @param productId
	 * @return
	 */
	public List<CustomStateHist> getReceiveCustomStateHistByCustomIdAndProductId(String customId,String productId);
	
	public void updateCustomStateHistByCustomIdAndEmpNo(String customId,String empNo,String productId);



	/**
	 * 
	 * 功能描述：修改客户关系历史表接收状态
	 * 
	 * @author 王湛智
	 * 
	 * @param cusId
	 * @param empno
	 * @param state
	 */
	public void updateCustomStateByCustomIdAndEmpno(String cusId,String empno, Integer customerState);
	/**
	 * 
	 * 功能描述：根据客户ID 销售ID删除客户关系历史
	 * 
	 * @author 王湛智
	 * 
	 * @param cusId
	 * @param empno
	 * @throws SQLException
	 */
	public void delCustomStateHistByCusIdAndEmpno(String cusId,String empno, String productCode) throws SQLException;
	/**
	 * 根据业绩保留期 判断客户是否可以进入公海
	 * @param scoreHoldTime
	 * @return
	 */
	public boolean isCanGoOpenSeaByScoreHoldTime(String customId,String scoreHoldTime);
	
	/**
	 * 根据业绩保留期  产品ID  客户ID    获取CustomStateHist
	 * @param customId
	 * @param scoreHoldTime
	 * @param productId
	 * @return
	 */
	public List<CustomStateHist> getCustomStateHistByScoreHoldTimeAndCustomIdAndProductId(String customId,String scoreHoldTime,String productId);
	
	/**
	 * 根据客户ID获取客户状态历史记录
	 * @param customId 客户ID
	 * @return
	 */
	public List<CustomStateHist> getCustomStateHistByCustomId(PageView<CustomStateHist> pageView, String customId);
	/**
	 * 
	 *
	 * 功能描述：用pushHistId修改状态历史表
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年6月27日
	 *
	 */
	public void updateCustomStateHistByPushHistId(String pushHistId) throws SQLException;
	/**
	 * 
	 *
	 * 功能描述：根据ID修改状态历史表
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年7月3日
	 *
	 */
	public void updateCustomStateHistByCshId(CustomStateHist customStateHist) throws SQLException;
	/**
	 * 
	 *
	 * 功能描述：根据时间区间查询关系表记录
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年7月23日
	 *
	 */
	public List<CustomStateHist> getCshByTime(Notice notice);

	/**
	 * 获取推送人不为"system"且不等于null的记录
	 * @return
	 */
	public List<CustomStateHist> getCshByTimeAndEmpno(Emp emp);
	/**
	 * 
	 *
	 * 功能描述：根据时间区间和客户类型查询关系表记录
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年7月23日
	 *
	 */
	public List<CustomStateHist> getCshByTimeAndCustomerType(Customer customer);
	
	public CustomStateHist getCustomStateHistByCondition(CustomStateHist customerStateHist);
}
